package com.wsoft.utils;

import cn.hutool.core.util.StrUtil;

/**
 * @Author z001
 * @Date 2024/10/28 13:48
 */
public class NumberUtil {

    /**
     * 验证用户输入的DECIMAL格式的字符串是否正确
     * @param decimalFormat 字符串，格式为"precision,scale"
     * @return 如果输入有效，则返回true；否则返回false
     */
    public static   boolean isValidDecimalFormatString(String decimalFormat) {
        // 使用逗号作为分隔符拆分字符串
        String[] parts = decimalFormat.split(StrUtil.COMMA);

        // 确保字符串被正确地拆分成了两部分
        /**
         * decimal格式
         */
        int decimalCount = 2;
        if (parts.length != decimalCount) {
            return false;
        }

        // 尝试解析精度和标度为整数
        try {
            int precision = Integer.parseInt(parts[0].trim());
            int scale = Integer.parseInt(parts[1].trim());

            // 验证精度和标度是否构成有效的DECIMAL格式
            return isValidDecimalFormat(precision, scale);
        } catch (NumberFormatException e) {
            // 如果解析整数时发生异常，则输入无效
            return false;
        }
    }

    /**
     * 验证精度和标度是否构成有效的DECIMAL格式
     * @param precision 精度（总位数）
     * @param scale 标度（小数点后的位数）
     * @return 如果有效，则返回true；否则返回false
     */
    private static  boolean isValidDecimalFormat(int precision, int scale) {
        // 精度必须是一个大于0的整数
        if (precision <= 0) {
            return false;
        }
        // 标度必须是一个介于0和精度之间的整数
        if (scale < 0 || scale >= precision) {
            return false;
        }
        return true;
    }
}
